home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
taropyon
/
install
/
gsplay.cci
< prev
next >
Wrap
Text File
|
1993-11-30
|
9KB
|
307 lines
/*************************************************************************
* GSPLAY install
*************************************************************************/
#define _IGN_TONE
char *GsplayMsg[12] =
{
"GSPLAYはMIDI用演奏データを演奏するプログラムです。",
"データファイルはスタンダードMIDIファイル(ファイル名の拡張子は.MID)と",
"EUPHONY 形式(ファイル名の拡張子は.EUP)に対応しています。",
"ただし,内蔵音源用に作成されたEUP ファイルは演奏できません。",
"TOWNS の内蔵音源をGS規格相当の音源として動作させることもでき,",
"この場合,GS音源用に作成された演奏データを",
"TOWNS の内蔵音源で再生することができます。",
#ifndef _IGN_TONE
"(内蔵音源で演奏させる場合には音色データファイルが必要です)",
#else
"※ 内蔵音源で演奏させる場合には別途,音色データファイルが必要です。",
#endif
NULL
};
char *GsplayFile1[6] = /* インストールするファイル */
{
"gsplay.exp" , /* 最初は必ず実行プログラムを置く */
"gsplay.doc",
"gstone.dat",
"gsrym.dat",
"*.mex",
NULL
};
#ifndef _IGN_TONE
char *GsplayFile2[6] =
{
"gsdata.doc",
"*.gsd",
"*.fmb",
"*.pmb",
"*.snd",
NULL
};
#endif
#define _GS_MIDI 1
#define _GS_RS 2
#define _GS_TOWNS 3
/*************************************************************************
* インストール
*************************************************************************/
int gsplay_install()
{
int i, ret, len;
char *btn;
char *fdl;
int drv;
unsigned int totalFree, writeFree;
char *p, tmp[256], path[256], ccipath[256], whare[256], prog[256];
short frm[4];
char *aplname, *dirname, *srcdir;
int gsdata, gsdev;
aplname = "GSPLAY";
dirname = "GSPLAY";
srcdir = " :/TAROPYON/GSPLAY/";
srcdir[0] = StartPath[0];
dsp_init(GsplayMsg);
_RETRY:
DSP_writePage(1);
btn = MNU_allocBtn( 2 );
MNU_setBtn( btn, 0, '\r' , KA_EXEC , 1, "INSTALL : [実行]" );
MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
ret = MNU_selectBtn( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
" %s のインストールを行いますか? ", aplname );
MNU_freeBtn( btn );
if ( ret != 1 )
return (0);
/* MIDIカード選択 ------------------------------------------------*/
btn = MNU_allocBtn( 3 );
MNU_setBtn( btn, 0, 'B', KA_B, _GS_MIDI , "Board MIDI :[N]" );
MNU_setBtn( btn, 1, 'R', KA_R, _GS_RS , "RS-232C MIDI : [R]" );
MNU_setBtn( btn, 2, 'T', KA_T, _GS_TOWNS, "TOWNS only : [T]" );
ret = MNU_selectBtn( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 3, btn,
" 使用するMIDIインターフェースを指定してください。\n\n%s\n%s\n%s",
"Board MIDI : FMT-401/402/403,MC-P23T",
"RS-232C MIDI : RS-232C MIDI アダプタ ",
"TOWNS only : 内蔵音源のみ "
);
MNU_freeBtn( btn );
if ( ret < _GS_MIDI || ret > _GS_TOWNS )
goto _RETRY;
gsdev = ret;
DLG_tmpMsgTime( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
3, "\n インストール先に移動してください。 \n" );
/* インストール */
if ( (fdl = FDL_open(0)) == NULL )
return (-1);
FDL_set_title( fdl,"インストール先指定");
FDL_set_wildcard( fdl, "*.*");
ret = FDL_start(fdl);
if ( ret == NORMAL )
{
drv = FDL_get_drv(fdl);
strcpy( whare, FDL_get_whare(fdl) );
}
FDL_close(fdl);
if ( ret )
goto _RETRY;
/* ディスクのチェック --------------------------------------------*/
if ( FS_getDskFree( drv, &totalFree, &writeFree) )
{
DLG_tmpMsgTime( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
3, " ディスクの準備ができていません。 " );
goto _RETRY;
}
if ( writeFree < 544*1024 )
{
ret = MNU_sure( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
" %c: Disk free space %u [%s] byte(s) \n ディスク容量が足りません。 ",
drv + 'A', writeFree, getSizMsg(NULL,writeFree) );
if ( ret != MENU_SURE_OK )
goto _RETRY;
}
sprintf( tmp, "%c:/%s", drv+'A', whare );
len = strlen(tmp);
if ( len > 0 && tmp[len-1] != '/' && tmp[len-1] != '\\' )
{
tmp[len++] = '/';
tmp[len] = '\0';
}
sprintf( path, "%s%s", tmp, dirname );
ret = FS_isFileExist(path);
if ( ret == 0 )
{ /* ファイルは存在しない */
/* ディレクトリ作成確認 */
btn = MNU_allocBtn( 2 );
MNU_setBtn( btn, 0, '\r' , KA_EXEC , 1, "MKDIR : [実行]" );
MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
ret = MNU_selectBtn( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
" インストール先にディレクトリを作成します。 \n%s", path );
MNU_freeBtn( btn );
if ( ret != 1 )
goto _RETRY;
FS_mkdir(path);
} else if ( ret == 1 )
{ /* ファイルが存在 */
MNU_sure( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
" %s \n インストール先に同名のファイルが存在しています。 ", path );
goto _RETRY;
}
/* インストール先確認 --------------------------------------------*/
btn = MNU_allocBtn( 2 );
MNU_setBtn( btn, 0, '\r' , KA_EXEC , 1, "INSTALL : [実行]" );
MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
ret = MNU_selectBtn( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
"インストール先 : %s\n Disk free space %u [%s] byte(s) \n\n インストールを行いますか? ",
path, writeFree, getSizMsg(NULL,writeFree) );
MNU_freeBtn( btn );
if ( ret != 1 )
goto _RETRY;
/* 複写元にカレントを移動 */
sprintf( tmp, "%s.", srcdir );
FS_chdrv( toupper(srcdir[0]) - 'A' );
FS_chdir( tmp );
/* 本体及び関連ファイル */
ret = i = 0;
while ( (p = GsplayFile1[i++]) != NULL && ret == 0 )
{
SYL_puts( C_INFO, "copy %s", p );
ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
}
if ( ret == NORMAL )
{ /* 内蔵音源用音色データ */
#ifndef _IGN_TONE
gsdata = 0;
if ( gsdev != _GS_TOWNS )
{
btn = MNU_allocBtn( 2 );
MNU_setBtn( btn, 0, '\r' , KA_EXEC , 1, "INSTALL : [実行]" );
MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
ret = MNU_selectBtn( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
" 内蔵音源用の音色データもインストールしますか? " );
MNU_freeBtn( btn );
if ( ret == 1 )
gsdata = 1;
ret = NORMAL;
} else
gsdata = 1;
if ( gsdata )
{
btn = MNU_allocBtn( 3 );
MNU_setBtn( btn, 0, 'S', KA_S, 1, "SMALL : [S]" );
MNU_setBtn( btn, 1, 'M', KA_M, 2, "MEDIUM : [M]" );
MNU_setBtn( btn, 2, 'L', KA_L, 3, "LARGE : [L]" );
ret = MNU_selectBtn( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 3, btn,
"音色データのモデルを選択してください。\n%s\n%s\n%s",
"SMALL … 必要メモリ 2~3Mバイト ",
"MEDIUM … 必要メモリ 3~4Mバイト ",
"LARGE … 必要メモリ 5Mバイト以上" );
MNU_freeBtn( btn );
if ( ret < 1 )
goto _RETRY;
switch ( ret )
{
case 1: p = "SMALL"; break;
case 2: p = "MEDIUM"; break;
case 3: p = "LARGE"; break;
}
FS_chdir(p);
ret = i = 0;
while ( (p = GsplayFile2[i++]) != NULL && ret == 0 )
{
SYL_puts( C_INFO, "copy %s", p );
if ( FS_isFileExist(p) == 0 )
continue;
ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
}
}
#else
if ( gsdev == _GS_TOWNS )
{
MNU_sure( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
" 内蔵音源用の音色データファイルは\nインストールされませんので\n別途用意してください。" );
}
#endif
}
if ( ret )
{ /* error */
MNU_sure( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
"FILE COPY ERROR\n インストールに失敗しました。 " );
return (-1);
}
/* アイテム登録 */
SYL_puts( C_INFO, "アイテム登録" );
sprintf( ItmPath, "%c:\\tmenu.itm", drv+'A');
if ( FS_isFileExist(ItmPath) == 0 )
{ /* アイテムファイルの作成 */
ITM_CreateItemFile(ItmPath);
}
ret = MNU_sure( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER,
" item file %s \n アイテム登録を行います。 ", ItmPath );
if ( ret == MENU_SURE_OK )
{
sprintf( tmp, "%s/%s", path, GsplayFile1[0]);
FS_unix2dos( prog, tmp+2 );
FS_strupr( prog ); /* 大文字に変換 */
item_set_newpos( frm );
if ( gsdev == _GS_MIDI )
{
ITM_AddAplItem( ItmPath, 0, 1024, "GSPLAY/midi", prog, "", 2, frm );
} else if ( gsdev == _GS_RS )
{
ITM_AddAplItem( ItmPath, 0, 1024, "GSPLAY/rs", prog, "-rsmidi -gsPort R", 2, frm );
}
if ( gsdata )
{
FRM_X1(frm) += 48;
FRM_X2(frm) += 48;
item_adjust_pos( frm );
ITM_AddAplItem( ItmPath, 0, 1024, "GSPLAY/int", prog, "-intPort A", 2, frm );
}
}
SYL_puts( C_INFO, "***** Completed *****");
DLG_tmpMsgTime( DlgX0, DlgY0,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
3, " インストール終了しました。 " );
return (0);
}